#title: 乐观锁
#author:ecoolper(crskyp@gmail.com)
#index:0,1
------------------------------------------------------------------------------------------
乐观锁

    在多用户环境中，在同一时间可能会有多个用户更新相同的记录，会产生冲突，解决方案有两种：乐观锁、悲观锁。
    悲观锁在这里不讲，自行Google。
    乐观锁假设不会发生并发冲突，只在提交操作时检查是否违反数据完整性，不完整则更新失败。

------------------------------------------------------------------------------------------
乐观锁实现方式

    * 使用整数表示数据版本号.更新时检查版本号是否一致,如果相等,则更新成功,且版本号+1.如果不等,则数据已经被修改过,更新失败。
    * 使用时间戳来实现。 本质上也是版本号,只是版本号是时间戳,并发就死.

------------------------------------------------------------------------------------------
Nutz实现方式

    * version字段必须是数字类型（int、long、short)，不符合则抛出异常
    * 一个表中最多只能有一个version=true的字段，否则抛出异常
    * version字段不能为空，为空则不能正确更新数据，但不报错和抛出异常
    * 只支持实体类形式的更新，包括实体类集合
    * 乐观锁更新方法 dao.updateWithVersion
    * 调用dao.updateWithVersion后，version字段值自动加1
    

代码片段

    {{{<JAVA>
    public class Pet {
        	@Name
        	private String name;
        	@Column
        	private int age;
        	@Column(version = true)
        	private int version;
    }
    
    // 执行更新
    dao.updateWithVersion(pet);
    // 实际执行的SQL
    update table set age=?,version=version+1 where name=? and version=?
    }}}
